/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jumavidesktop.GUI.Principal;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.net.MalformedURLException;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import jumavidesktop.GUI.Configuracion;
import jumavidesktop.GUI.Mantenimientos.Camaras.Vistas.MantenimientoCamaras;
import jumavidesktop.GUI.Mantenimientos.Usuarios.Vistas.MantenimientoUsuarios;
import jumavidesktop.GUI.SobreNosotros.SobreNosotros;
import jumavidesktop.Manejadores.Implementaciones.ControlMCamaras;
import jumavidesktop.Manejadores.Implementaciones.RegistraMovimientos;
import jumavidesktop.Persistencia.Dao.Implementaciones.DaoCamaras;
import jumavidesktop.Persistencia.Dao.Interfaces.IDaoCamaras;

/**
 *
 * @author vimso
 */
public class PrincipalMDI extends javax.swing.JFrame {
    
    Ventana_Lista ventLista;
    Ventana_Mov ventMov;
    RegistraMovimientos accesoBBDD;
    ControlMCamaras controlCamaras;
    Panel_Video video;
   
    public PrincipalMDI() throws MalformedURLException {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
               //if ("Motif".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(PrincipalMDI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(PrincipalMDI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(PrincipalMDI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(PrincipalMDI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        java.net.URL imageURL = getClass().getResource("/jumavidesktop/recursos/ico_car.png");
        ImageIcon img = new ImageIcon(imageURL);
        this.setIconImage(img.getImage());

        //Maximizo
        this.setExtendedState(MAXIMIZED_BOTH);
        initComponents();
        
        //Creo paneles notificaciones y agrego al desktopPane.
        ventLista = new Ventana_Lista();
        ventMov = new Ventana_Mov();
        accesoBBDD = new RegistraMovimientos();
        this.desktopPane.add(ventLista);
        this.desktopPane.add(ventMov);
        
        //reocojo resolución actual, y ordeno paneles en función de esto.
        Dimension tamPant = Toolkit.getDefaultToolkit().getScreenSize();
        ventMov.setLocation(tamPant.width-ventMov.getWidth(),0);
        ventLista.setSize(tamPant.width,300);
        ventLista.setLocation(0,tamPant.height-380);
        
        
        //Creo controlador de MCamaras.
        controlCamaras = new ControlMCamaras();
        
        //creo panel de video y agrego al desktopPane.
        video = new Panel_Video(controlCamaras);
        this.desktopPane.add(video);
        video.setSize(600,400);  
        
        //Agrego notificadores al control de cámaras y al panel de video. 
        controlCamaras.agregarObservador(ventLista);
        controlCamaras.agregarObservador(ventMov);
        controlCamaras.agregarObservador(accesoBBDD);
        controlCamaras.agregarObservador(video);//este es para actualizar el boton de barrera abierta.
        controlCamaras.attachVideo(video); /* este es para cuando agrege una cámara en el mantenimiento
                                              de cámaras, que se actualize el JcomboBox del panelVideo
                                              con la cámara nueva.*/
                                            
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        desktopPane = new javax.swing.JDesktopPane();
        menuBar = new javax.swing.JMenuBar();
        Archivo = new javax.swing.JMenu();
        configuracionMenuItem = new javax.swing.JMenuItem();
        salirMenuItem = new javax.swing.JMenuItem();
        Acciones = new javax.swing.JMenu();
        mnGUsuarios = new javax.swing.JMenuItem();
        mnGCamaras = new javax.swing.JMenuItem();
        mnGMovimientos = new javax.swing.JMenuItem();
        SobreNosotros = new javax.swing.JMenu();
        SobreNosItem = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Jumavi");
        setAlwaysOnTop(true);
        setIconImage(getIconImage());
        setName("MdiPrincipal"); // NOI18N
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        Archivo.setMnemonic('f');
        Archivo.setText("Archivo");

        configuracionMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_1, java.awt.event.InputEvent.CTRL_MASK));
        configuracionMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jumavidesktop/recursos/iconos/config.png"))); // NOI18N
        configuracionMenuItem.setMnemonic('a');
        configuracionMenuItem.setText("Configuración");
        configuracionMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                configuracionMenuItemActionPerformed(evt);
            }
        });
        Archivo.add(configuracionMenuItem);

        salirMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK));
        salirMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jumavidesktop/recursos/iconos/exit.png"))); // NOI18N
        salirMenuItem.setMnemonic('x');
        salirMenuItem.setText("salir del sistema");
        salirMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                salirMenuItemActionPerformed(evt);
            }
        });
        Archivo.add(salirMenuItem);

        menuBar.add(Archivo);

        Acciones.setMnemonic('e');
        Acciones.setText("Acciones");

        mnGUsuarios.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_2, java.awt.event.InputEvent.CTRL_MASK));
        mnGUsuarios.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jumavidesktop/recursos/iconos/Usuarios.png"))); // NOI18N
        mnGUsuarios.setText("Gestión de Usuarios");
        mnGUsuarios.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnGUsuariosActionPerformed(evt);
            }
        });
        Acciones.add(mnGUsuarios);

        mnGCamaras.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_3, java.awt.event.InputEvent.CTRL_MASK));
        mnGCamaras.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jumavidesktop/recursos/iconos/camara.png"))); // NOI18N
        mnGCamaras.setText("Gestión de Cámaras");
        mnGCamaras.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnGCamarasActionPerformed(evt);
            }
        });
        Acciones.add(mnGCamaras);

        mnGMovimientos.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_4, java.awt.event.InputEvent.CTRL_MASK));
        mnGMovimientos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jumavidesktop/recursos/iconos/lupa.png"))); // NOI18N
        mnGMovimientos.setText("Visor de Movimientos");
        mnGMovimientos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnGMovimientosActionPerformed(evt);
            }
        });
        Acciones.add(mnGMovimientos);

        menuBar.add(Acciones);

        SobreNosotros.setMnemonic('h');
        SobreNosotros.setText("Sobre nosotros");

        SobreNosItem.setMnemonic('a');
        SobreNosItem.setText("Sobre nosotros");
        SobreNosItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                SobreNosItemActionPerformed(evt);
            }
        });
        SobreNosotros.add(SobreNosItem);

        menuBar.add(SobreNosotros);

        setJMenuBar(menuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 303, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void salirMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_salirMenuItemActionPerformed
//        System.exit(0); //No sirve system.exit(0); por k no sale por el ciclo normal de la ventana, cona la consecuencia de k no se cerrarian conexiona a la base de datos entre otros
        
        this.processWindowEvent(
                new WindowEvent(
                this, WindowEvent.WINDOW_CLOSING));
    }//GEN-LAST:event_salirMenuItemActionPerformed

    private void SobreNosItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SobreNosItemActionPerformed
        SobreNosotros formSobreNosotros = new SobreNosotros();
        ClassLoader cldr = this.getClass().getClassLoader();
        java.net.URL imageURL = cldr.getResource("jumavidesktop/recursos/Bad-Blood-Yolks-Yuush.ico");
        ImageIcon img = new ImageIcon(imageURL);
        formSobreNosotros.setFrameIcon(img);
        formSobreNosotros.setVisible(true);
        formSobreNosotros.setLocation(centro().x-formSobreNosotros.getWidth()/2,centro().y-formSobreNosotros.getHeight()/2);
        this.anadirJinternal(formSobreNosotros);
        formSobreNosotros.toFront();
    }//GEN-LAST:event_SobreNosItemActionPerformed

    private Point centro(){
        int x = this.getWidth()/2;
        int y = this.getHeight()/2;
        return new Point(x,y);
    }
    private void configuracionMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configuracionMenuItemActionPerformed
        Configuracion configView = new Configuracion();        //Abro la ventana de Configuración
        configView.setLocationRelativeTo(null);
        configView.setVisible(Boolean.TRUE);
        this.toBack();
        this.toFront();
        configView.toFront();
    }//GEN-LAST:event_configuracionMenuItemActionPerformed

    private void mnGUsuariosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnGUsuariosActionPerformed
        MantenimientoUsuarios formUsuarios= new MantenimientoUsuarios(this);
        formUsuarios.setLocation(centro().x-formUsuarios.getWidth()/2,centro().y-formUsuarios.getHeight()/2);
        this.anadirJinternal(formUsuarios);
        formUsuarios.toFront();
    }//GEN-LAST:event_mnGUsuariosActionPerformed

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
        // TODO add your handling code here:
        //Paro la base de datos
        //Pongo toodas las camaras 
        IDaoCamaras daoCamaras = new DaoCamaras();
        daoCamaras.ponerCamaraDesactiva();
        jumavidesktop.configuracion.Configuracion.getInstance().desconectarBBDD();
    }//GEN-LAST:event_formWindowClosing

    private void mnGCamarasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnGCamarasActionPerformed
        MantenimientoCamaras formCamaras= new MantenimientoCamaras(this);
        formCamaras.attach(this.controlCamaras);
        formCamaras.setLocation(centro().x-formCamaras.getWidth()/2,0);
        this.anadirJinternal(formCamaras);
        formCamaras.toFront();
    }//GEN-LAST:event_mnGCamarasActionPerformed

private void mnGMovimientosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnGMovimientosActionPerformed
    Ventana_Busq_Mov formMovimientos = new Ventana_Busq_Mov();
    formMovimientos.setLocation(centro().x-formMovimientos.getWidth()/2,centro().y-formMovimientos.getHeight()/2);
    this.anadirJinternal(formMovimientos);
    formMovimientos.toFront();
}//GEN-LAST:event_mnGMovimientosActionPerformed
    
    private void anadirJinternal(JInternalFrame parametro) {
        Boolean centinela = false;
        JInternalFrame[] frames = this.desktopPane.getAllFrames();

        for (JInternalFrame elemento : frames) {
            if (parametro.getClass() == elemento.getClass()) {
                centinela = true;
            }
        }
        if (!centinela) {
            this.desktopPane.add(parametro);
            parametro.setVisible(true);
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenu Acciones;
    private javax.swing.JMenu Archivo;
    private javax.swing.JMenuItem SobreNosItem;
    private javax.swing.JMenu SobreNosotros;
    private javax.swing.JMenuItem configuracionMenuItem;
    private javax.swing.JDesktopPane desktopPane;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JMenuItem mnGCamaras;
    private javax.swing.JMenuItem mnGMovimientos;
    private javax.swing.JMenuItem mnGUsuarios;
    private javax.swing.JMenuItem salirMenuItem;
    // End of variables declaration//GEN-END:variables
}
